
// Definition for a binary tree node.
struct TreeNode
{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
#include <vector>
#include <string>
using namespace std;
class Solution
{
public:
    // 9 会返回 495 + 491 ,4会返回495+491+40
    int __sumNumbers(TreeNode *root, int num)
    {
        if (!root)
            return 0;
        num = num * 10 + root->val;
        if (!root->left && !root->right)
            return num;
        return __sumNumbers(root->left, num) + __sumNumbers(root->right, num);
    }
    int sumNumbers(TreeNode *root)
    {
        return __sumNumbers(root, 0);
    }
};
// class Solution
// {
// private:
//     vector<int> nums;

// public:
//     // 拿到并且存储每个加数
//     void __sumNumbers(TreeNode *root, int num)
//     {
//         if (!root)
//             return;
//         num = num * 10 + root->val;
//         if (!root->left && !root->right)
//         {
//             nums.push_back(num);
//         }
//         __sumNumbers(root->left, num), __sumNumbers(root->right, num);
//     }
//     int sumNumbers(TreeNode *root)
//     {
//         __sumNumbers(root, 0);
//         // 求和
//         int res;
//         for (auto e : nums)
//         {
//             res += e;
//         }
//         return res;
//     }
// };